home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 November / EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso / earcd / program / misc / tri14dev.lha / Triton / Developer / gcc / source / tr_trlogo.c < prev    next >
C/C++ Source or Header  |  1995-08-25  |  4KB  |  128 lines

  1. /*
  2.  *  Triton - The object oriented GUI creation system for the Amiga
  3.  *  Written by Stefan Zeiger in 1993-1994
  4.  *
  5.  *  (c) 1993-1994 by Stefan Zeiger
  6.  *  You are hereby allowed to use this source or parts of it for
  7.  *  creating programs for AmigaOS which use the Triton GUI creation
  8.  *  system. All other rights reserved.
  9.  *
  10.  *  Triton linkable library code for GCC - (c) 1994 by Gunther Nikl
  11.  */
  12.  
  13. #include <utility/hooks.h>
  14. #include "triton.h"
  15. #include <inline/graphics.h>
  16. #include <inline/intuition.h>
  17. #include <clib/alib_protos.h>
  18.  
  19. #define ARROWLENGTH 4
  20. #define LANCELENGTH 2
  21. #define CURVELENGTH 15
  22.  
  23. struct IClass *TRIM_trLogo;
  24.  
  25. /* special defines to save and setup the base register */
  26.  
  27. #define SETA4(x) asm volatile ("movel a4,sp@-; movel %0,a4" :/* */: "g" (x))
  28. #define RESA4(x) asm volatile ("movel sp@+,a4;")
  29.  
  30. /* boopsi functions */
  31.  
  32. void TR_ScaledPolyDraw(struct RastPort *rport, UWORD len, WORD *array, ULONG orgwid, ULONG orghei, ULONG newwid, ULONG newhei, ULONG left, ULONG top)
  33. {
  34.   UWORD i;
  35.  
  36.   for(i=0;i<len;i++)
  37.   {
  38.     array[i*2]=((array[i*2]*newwid)/orgwid)+left;
  39.     array[(i*2)+1]=((array[(i*2)+1]*newhei)/orghei)+top;
  40.   }
  41.   Move(rport, array[0], array[1]);
  42.   PolyDraw(rport, len-1, &array[2]);
  43. }
  44.  
  45.  
  46. ULONG TRIM_trLogo_DrawBoopsiImage(struct Image *Image, struct impDraw *DrawMsg)
  47. {
  48.   struct RastPort         * RPort           = DrawMsg->imp_RPort;
  49.   UWORD                     BackColor       = DrawMsg->imp_DrInfo->dri_Pens[BACKGROUNDPEN],
  50.                             TextColor       = DrawMsg->imp_DrInfo->dri_Pens[TEXTPEN];
  51.   WORD                      left            = Image->LeftEdge + DrawMsg->imp_Offset.X,
  52.                             top             = Image->TopEdge + DrawMsg->imp_Offset.Y,
  53.                             width           = Image->Width,
  54.                             height          = Image->Height,
  55.                             Arrow1Array[ARROWLENGTH*2] = {22,6, 30,2, 26,10, 22,6},
  56.                             Arrow2Array[ARROWLENGTH*2] = {34,18, 42,14, 38,22, 34,18},
  57.                             Arrow3Array[ARROWLENGTH*2] = {46,30, 54,26, 50,34, 46,30},
  58.                             LanceArray[LANCELENGTH*2] = {2,54, 36,20},
  59.                             CurveArray[CURVELENGTH*2] = {24,8, 22,10, 20,14, 19,18, 18,22, 19,26, 20,30, 22,34, 26,36, 30,37, 34,38, 38,37, 42,36, 46,34, 48,32};
  60.  
  61.   /* Background */
  62.   SetAfPt(RPort, NULL, -1);
  63.   SetAPen(RPort, BackColor);
  64.   SetDrMd(RPort, JAM1);
  65.   RectFill(RPort, left, top, left+width-1, top+height-1);
  66.  
  67.   /* Adjust size (->square) */
  68.   if(width>height)
  69.   {
  70.     left+=((width-height)/2);
  71.     width=height;
  72.   }
  73.   else if(width<height)
  74.   {
  75.     top+=((height-width)/2);
  76.     height=width;
  77.   }
  78.  
  79.   /* Logo */
  80.   SetAPen(RPort, TextColor);
  81.   TR_ScaledPolyDraw(RPort,ARROWLENGTH,Arrow1Array,56,56,width,height,left,top);
  82.   TR_ScaledPolyDraw(RPort,ARROWLENGTH,Arrow2Array,56,56,width,height,left,top);
  83.   TR_ScaledPolyDraw(RPort,ARROWLENGTH,Arrow3Array,56,56,width,height,left,top);
  84.   TR_ScaledPolyDraw(RPort,LANCELENGTH,LanceArray,56,56,width,height,left,top);
  85.   TR_ScaledPolyDraw(RPort,CURVELENGTH,CurveArray,56,56,width,height,left,top);
  86.  
  87.   return(TRUE);
  88. }
  89.  
  90.  
  91. ULONG TRIM_trLogo_DispatchBoopsiImage(/*struct IClass *Class, Object *Object, Msg ObjMsg*/)
  92. {
  93.   register struct IClass *Class asm("a0");
  94.   register Object *Object asm("a2");
  95.   register Msg ObjMsg asm("a1");
  96.   ULONG retval;
  97.  
  98.   SETA4(Class->cl_Dispatcher.h_Data);
  99.   if (ObjMsg->MethodID==IM_DRAW)
  100.     retval=TRIM_trLogo_DrawBoopsiImage((struct Image *)Object, (struct impDraw *)ObjMsg);
  101.   else
  102.     retval=DoSuperMethodA(Class, Object, ObjMsg);
  103.   RESA4(0);
  104.   return retval;
  105. }
  106.  
  107.  
  108. BOOL TRIM_trLogo_Init(VOID)
  109. {
  110.   register void *a4 asm("a4");
  111.  
  112.   if ((TRIM_trLogo = MakeClass(NULL, IMAGECLASS, NULL, 0, 0)))
  113.   {
  114.     TRIM_trLogo->cl_Dispatcher.h_Entry = (HOOKFUNC)TRIM_trLogo_DispatchBoopsiImage;
  115.     TRIM_trLogo->cl_Dispatcher.h_Data  = a4;
  116.   }
  117.   return (TRIM_trLogo!=NULL);
  118. }
  119.  
  120.  
  121. VOID TRIM_trLogo_Free(VOID)
  122. {
  123.   if (TRIM_trLogo)
  124.   {
  125.     FreeClass(TRIM_trLogo); TRIM_trLogo=NULL;
  126.   }
  127. }
  128.